---
title: Bill entry
summary: Screen where bill-entry staff key, save, submit, send or pend, and discard a medical bill against a SAIF claim.
status: draft
owner: Claims
last_reviewed: 2026-09-30
---

# Bill entry

Bill entry is the application's landing screen and its main working screen. The user keys a medical bill: the bill header and claim number, billing provider, diagnoses, procedures, service lines and notes. The user then saves the bill, submits it, sends or pends it to a mail id, or discards it. One full view hosts all of this, and the page loads every bill into the same view through AJAX calls, so the user stays on `Entry/Index` while moving between bills. After a bill is submitted, discarded or sent or pended, the outcome depends on the Auto feed checkbox: when it is checked, the screen stays on Bill entry and loads the next bill from the queue, and when it is not checked, the browser moves to the [Inbox](inbox.md) screen.

## Route

| Controller | Action | Verb | URL | Parameters | View | Layout |
| --- | --- | --- | --- | --- | --- | --- |
| `EntryController` | `Index` | GET | `/ClaimBillEntry/Entry/Index/{id}` | `id` bound to the `bill` parameter through `[Bind(Prefix = "id")]`; optional | `Views/Entry/Index.cshtml` | `~/Views/Shared/_Bootstrap3.cshtml` |

The default route `{controller}/{action}/{id}` is the only route that reaches this action; the application also reaches it from `/` through the `Home.Index` redirect.

## Access

| Requirement | Declared on | Effect |
| --- | --- | --- |
| `[SaifAuthorize(Roles = "CBPEnterBill")]` | `EntryController` | Only users in the `CBPEnterBill` role can open the screen or call its `Entry/*` actions. |
| `IsAuthorized("CBEDiscardBill")` | `EntryController.Index` | Sets `CanDiscardBill` on the view model; the Discard button is hidden when the user lacks the permission. |
| `IsConflictClaim` then `IsAuthorized("ConflictClaim")` | `EntryController.GetBill` | A bill on a conflict claim is refused with "You are not authorized to view claim" unless the user holds `ConflictClaim`. |
| `CheckSecurity` returns `HasConflictAccess` | `BaseController` | Applies conflict-claim access to the web-context claim. |

The grid, lookup and validation actions that this screen calls live on controllers with no `[SaifAuthorize]` attribute; they require only an authenticated Windows user. See [Tech debt](../application/tech-debt.md).

## Entry conditions
- The user opens `/`; `Home.Index` redirects to `Entry/Index` (see [Screen catalog](index.md)).
- The user follows a link from the layout top menu or side menu for menu category `CLBLE`; the menu entries themselves are defined outside this repository.**
- The user double-clicks a row on [Inbox](inbox.md) or opens a result on [Search](search.md), which navigates to `/ClaimBillEntry/Entry/Index/{billId}`.
- The user opens a bill URL directly, or uses the browser back and forward buttons; the screen keeps the URL in step with the loaded bill through `history.pushState` and `replaceState`, and a `popstate` event reloads the bill.
- The user changes the claim in the layout web context control, which calls `Home/Navigate`.*

## Fields

| Field | Binds to | Control | Purpose | Validation |
| --- | --- | --- | --- | --- |
| Update number | `Worker.UpdateNumber` | Hidden | Concurrency number* | None |
| Bill # | `Worker.Id` | Read-only text | Displays the bill id | None |
| SAIF claim number | `Worker.SaifClaimNumber` | Text box | Identifies the claim; a change loads the worker through `GET Entry/GetWorkerInformation/{id}` | `maxlength` 7; client-side |
| Mail room received date | `Worker.MailRoomReceivedDate` | Kendo DatePicker | Date the bill was received | None declared |
| Bill type | `Worker.BillTypeCode` | Dropdown | Drives which other fields are enabled through the `disabledwhen` attribute | None declared |
| Type of bill | `Worker.UbBillTypeCode` | Text box | Institutional type-of-bill code | Numeric pattern, maximum 4 characters, "Invalid type of bill. Must be numeric."; client-side |
| Admit type | `Worker.CBPAdmissionTypeCode` | Text box | Admission type code | Pattern 1, 2, 3, 4, 5 or 9, "Invalid Admit Type. Must be 1-5 or 9."; client-side |
| Statement from and thru | `Worker.StatementFromDate`, `Worker.StatementThruDate` | Kendo DatePicker | Statement period | None declared |
| Admission and discharge | `Worker.AdmissionDate`, `Worker.DischargeDate` | Kendo DatePicker | Inpatient dates | None declared |
| Billing provider TIN | `Worker.ProviderTaxId` | Text box with lookup icon | Opens the billing provider lookup; a change calls `GET Provider/ValidateProviderTin` | Remote validation; client-side call |
| Billing provider location | `Worker.ProviderLocationId` | Hidden | Selected billing provider location | None |
| Patient reference number | `Worker.PatientReferenceNumber` | Text box | Provider's patient reference | `maxlength` 20; client-side |
| Total bill amount | `Worker.BillTotalAmount` | Kendo NumericTextBox (currency) | Bill total keyed by the user | Compared with the services total on submit; see [BR-SCR-004](../application/business-rules.md#br-scr-004-total-mismatch-requires-confirmation) |
| PPS DRG | `DrgCode` | Text box | Diagnosis-related group code | `maxlength` 3; client-side |
| Services total | `Worker.ServicesTotal` | Kendo NumericTextBox | Sum of charged services; always disabled and refreshed from `GetChargedServicesTotal` | Read-only |
| Auto feed | `AutoFeed` | Kendo CheckBox | When checked, the next bill is pulled from the queue, and after a successful submit, discard or send or pend the screen loads the next queue bill instead of navigating to the Inbox | None |

The diagnosis, procedure, service and note rows are edited in grids; see [Dialogs and partials](#dialogs-and-partials).

No DataAnnotations validation attributes exist on the live view models. Field checks are the client-side HTML patterns above, the server-side action checks in [Business rules](#business-rules), and FluentValidation validators from the bill validator assembly that the composition root registers.

## Operations

| Operation | Trigger | Request | Description | Delegates to |
| --- | --- | --- | --- | --- |
| New bill | Button `js-bo-NewBill` (Alt+B), after a confirm prompt | `GET Entry/GetNewBill` | Returns an empty bill from the bill entry service for the user to key.* | [Key and submit a bill](../application/operations/key-and-submit-bill.md) |
| Open bill | Route id or history navigation | `GET Entry/GetBill/{id}` | Loads an existing bill; refuses statuses other than Pending, Entered, Audited or Suspended and checks conflict-claim access. | [Open a bill from the inbox](../application/operations/open-bill-from-inbox.md) |
| Next bill from queue | `AutoFeed` checked | `GET Entry/GetBillFromQueue` | Pulls the next claim bill from the queue. | [Key and submit a bill](../application/operations/key-and-submit-bill.md) |
| Save bill | Button `SaveBill` (Alt+S) | `POST Entry/SaveBill` | Saves the bill through the bill entry service. | [Key and submit a bill](../application/operations/key-and-submit-bill.md) |
| Submit bill | Button `SubmitBill` (Alt+U) | `POST Entry/SubmitBill` | Submits the bill and sets status `ENT` when no errors are returned. | [Key and submit a bill](../application/operations/key-and-submit-bill.md) |
| Send or pend bill | Button `SendPendBill` (Alt+P), which opens the Send/Pend modal | `POST Entry/SendPendBill` | Sends or pends the bill to the mail id keyed in the modal and stores it in Session `SendPendMailId`. | [Send or pend a bill](../application/operations/send-pend-bill.md) |
| Discard bill | Button `DiscardBill` (Alt+C), after a confirm prompt | `POST Entry/DiscardBill` | Sets the bill status to `DIS`. | [Discard a bill](../application/operations/discard-bill.md) |
| View document | Button `ViewDocument` (Alt+V) | — | Client-side only; calls `launchOnBase(documentUrl)` from the OnBase enabler script to open the claim document. | — |
| Load worker | `Worker.SaifClaimNumber` change | `GET Entry/GetWorkerInformation/{id}` | Resolves the claim id from the claim number and returns the worker information. | [Key and submit a bill](../application/operations/key-and-submit-bill.md) |
| Default send or pend mail id | Send/Pend modal opens | `GET Entry/GetSendPendMailId` | Returns the Session `SendPendMailId` value, or the current user id when none is stored. | [Send or pend a bill](../application/operations/send-pend-bill.md) |

The `Delegates to` column links each server operation to the application workflow page that documents its steps, including the shared bill, claim and security service calls the controller makes. The View document row is the only screen-local handler, because it runs entirely in the browser. The internal steps of the consumed package services were not traced; those workflow pages mark that boundary explicitly. The [dependencies](../application/dependencies.md) page lists the packages involved.

## Dialogs and partials

| Name | Opens as | Returned by | Purpose |
| --- | --- | --- | --- |
| `_Worker` | Inline `Html.Partial` | Rendered by `Views/Entry/Index.cshtml` | Toolbar buttons and bill header fields. |
| `_DiagnosesAndProcedures` | Inline `Html.Partial` | Rendered by `Views/Entry/Index.cshtml` | Hosts the diagnoses grid, the DRG code and the procedure grid. |
| `_DiagnosesGrid` | Kendo Grid (in-cell batch edit) | Rendered by `_DiagnosesAndProcedures` | Diagnosis rows; toolbar Add Diagnosis (Alt+G); editor template `DiagnosisTypeEditor`. |
| `_ProcedureGrid` | Kendo Grid (in-cell batch edit) | Rendered by `_DiagnosesAndProcedures` | Procedure rows; editor templates `ProcedureDateTemplate` and `ProcedureTypeEditor`. |
| `_Services` | Inline `Html.Partial` | Rendered by `Views/Entry/Index.cshtml` | Services total, the service grid, the HTML preview area and the Add service window. |
| `_ServiceGrid` | Kendo Grid (popup edit) | Rendered by `_Services` | Service rows; toolbar Add Service (Alt+R); popup template `_EditService`, window "Edit Service"; page sizes 25, 50, 75 and 100. |
| Add service window (`#AddServiceModal` with `_AddService`) | Kendo Window with an Ajax form | Rendered by `_Services` | Posts to `ServiceGrid/EditingPopup_Create`; buttons Cancel, Save and Close, Save and Add Another. |
| `_ServiceForm` | Shared form partial | Used by `_AddService` and `_EditService` | Prescription and service dates, charge amount, prescribing provider dropdown and the embedded `_ServicePeekGrid`. |
| `_ServicePeekGrid` | Kendo Grid | Rendered by `_ServiceForm` | Read-only peek of existing service lines. |
| `_NotesGrid` | Kendo Grid (popup edit) | Rendered by `Views/Entry/Index.cshtml` | Note rows; popup template `_EditNote`, window "Add/Edit Note"; edit and delete only when `canEditNote`; toolbar Add Note (Alt+N). |
| `_EditNote` | Popup editor template | Used by `_NotesGrid` | `NoteText` (maximum 600 characters) and `IsActive`. |
| Send/Pend modal (`#sendPendModal`) | Bootstrap modal | Rendered by `Views/Entry/Index.cshtml` | `SendPendMailId` text box (maximum 7 characters); form action `Entry/SendPendBill`. |
| Billing provider lookup (`#providerLookupKendoModal`) | Kendo Window with `_ProviderLocationGrid` | Rendered by `Views/Entry/Index.cshtml` | Reads `Provider/GetBillingProviders`; choosing a provider prompts, saves the bill and refreshes the rendering providers. |
| Rendering provider lookup (`#renderingProviderLookupKendoModal`) | Kendo Window with `_RenderingProviderGrid` | Rendered by `Views/Entry/Index.cshtml` | Reads `Provider/GetRenderingProviders`; shows an Expired column. |

A toolbar link, Inactivate notes, posts the selected notes to `NoteGrid/InactivateNotes`.

The form `contentForm` targets `Entry/Index`, but no POST `Index` action exists, so the form is a client-side container only and the server never receives it.* The source at `ClaimBillEntry/Views/Entry/EditorTemplates/_AddService.cshtml:6` carries a comment reading, in full: "Do not remove this form tag" followed by three literal periods and then "not sure why but it's needed" — the developer's own uncertainty about why the tag is required.

## AJAX and grid actions

| Request | Kind | Called by | Returns |
| --- | --- | --- | --- |
| [`GET Entry/GetBillFromQueue`](../application/hosted-endpoints.md#entry.getbillfromqueue) | AJAX JSON | `AutoFeed` handler in `ClaimBillEntry.entry.js` | Bill view model |
| [`GET Entry/GetBill/{id}`](../application/hosted-endpoints.md#entry.getbill) | AJAX JSON | Route id load and history navigation | Bill view model or an error |
| [`GET Entry/GetNewBill`](../application/hosted-endpoints.md#entry.getnewbill) | AJAX JSON | New bill button | Empty bill view model |
| [`POST Entry/SaveBill`](../application/hosted-endpoints.md#entry.savebill) | AJAX JSON | Save button | Saved bill and messages |
| [`POST Entry/SubmitBill`](../application/hosted-endpoints.md#entry.submitbill) | AJAX JSON | Submit button | Bill and messages |
| [`POST Entry/SendPendBill`](../application/hosted-endpoints.md#entry.sendpendbill) | AJAX JSON | Send/Pend modal | Result and messages |
| [`POST Entry/DiscardBill`](../application/hosted-endpoints.md#entry.discardbill) | AJAX JSON | Discard button | Result |
| [`GET Entry/GetWorkerInformation/{id}`](../application/hosted-endpoints.md#entry.getworkerinformation) | AJAX JSON | Claim number change | Worker view model |
| [`ANY Entry/GetSendPendMailId`](../application/hosted-endpoints.md#entry.getsendpendmailid) | AJAX JSON | Send/Pend modal open | Mail id string |
| [`ANY Provider/GetBillingProviders`](../application/hosted-endpoints.md#provider.getbillingproviders) | Grid read | Billing provider lookup grid | DataSourceResult (cached 45 s) |
| [`ANY Provider/GetRenderingProviders`](../application/hosted-endpoints.md#provider.getrenderingproviders) | Grid read | Rendering provider lookup grid | DataSourceResult (cached 45 s) |
| [`GET Provider/ValidateProviderTin`](../application/hosted-endpoints.md#provider.validateprovidertin) | AJAX JSON | Provider TIN change | Validation result (cached 10 s) |
| [`POST NoteGrid/EditingPopup_Create`](../application/hosted-endpoints.md#notegrid.editingpopup_create) | Grid create | Notes grid | DataSourceResult |
| [`ANY NoteGrid/EditingPopup_Read`](../application/hosted-endpoints.md#notegrid.editingpopup_read) | Grid read | Notes grid | DataSourceResult |
| [`POST NoteGrid/EditingPopup_Update`](../application/hosted-endpoints.md#notegrid.editingpopup_update) | Grid update | Notes grid | DataSourceResult |
| [`POST NoteGrid/EditingPopup_Destroy`](../application/hosted-endpoints.md#notegrid.editingpopup_destroy) | Grid destroy | Notes grid | DataSourceResult |
| [`ANY NoteGrid/InactivateNotes`](../application/hosted-endpoints.md#notegrid.inactivatenotes) | AJAX | Inactivate notes link | Result |
| [`POST DiagnosisGrid/EditingCustom_Create`](../application/hosted-endpoints.md#diagnosisgrid.editingcustom_create) | Grid create | Diagnoses grid | DataSourceResult |
| [`ANY DiagnosisGrid/EditingCustom_Read`](../application/hosted-endpoints.md#diagnosisgrid.editingcustom_read) | Grid read | Diagnoses grid | DataSourceResult |
| [`POST DiagnosisGrid/EditingCustom_Update`](../application/hosted-endpoints.md#diagnosisgrid.editingcustom_update) | Grid update | Diagnoses grid | DataSourceResult |
| [`POST DiagnosisGrid/EditingCustom_Destroy`](../application/hosted-endpoints.md#diagnosisgrid.editingcustom_destroy) | Grid destroy | Diagnoses grid | DataSourceResult |
| [`GET DiagnosisGrid/ValidateDiagnosisCode`](../application/hosted-endpoints.md#diagnosisgrid.validatediagnosiscode) | AJAX JSON | Diagnosis code cell change (dots stripped) | Validation result |
| [`GET DiagnosisGrid/ClearDiagnosesCodes`](../application/hosted-endpoints.md#diagnosisgrid.cleardiagnosescodes) | AJAX (deletes data) | Clear diagnoses in `claimbillentry.entry.diagnosis.js` | Result |
| [`POST ProcedureGrid/EditingCustom_Create`](../application/hosted-endpoints.md#proceduregrid.editingcustom_create) | Grid create | Procedure grid | DataSourceResult |
| [`ANY ProcedureGrid/EditingCustom_Read`](../application/hosted-endpoints.md#proceduregrid.editingcustom_read) | Grid read | Procedure grid | DataSourceResult |
| [`POST ProcedureGrid/EditingCustom_Update`](../application/hosted-endpoints.md#proceduregrid.editingcustom_update) | Grid update | Procedure grid | DataSourceResult |
| [`POST ProcedureGrid/EditingCustom_Destroy`](../application/hosted-endpoints.md#proceduregrid.editingcustom_destroy) | Grid destroy | Procedure grid | DataSourceResult |
| [`GET ProcedureGrid/ValidateProcedureCode`](../application/hosted-endpoints.md#proceduregrid.validateprocedurecode) | AJAX JSON | Procedure code cell change | Validation result |
| [`GET ProcedureGrid/ClearProcedureCodes`](../application/hosted-endpoints.md#proceduregrid.clearprocedurecodes) | AJAX (deletes data) | Clear procedures in `claimbillentry.entry.procedure.js` | Result |
| [`POST ServiceGrid/EditingPopup_Create`](../application/hosted-endpoints.md#servicegrid.editingpopup_create) | Ajax form and grid create | Add service window | DataSourceResult |
| [`ANY ServiceGrid/EditingPopup_Read`](../application/hosted-endpoints.md#servicegrid.editingpopup_read) | Grid read | Services grid | DataSourceResult |
| [`POST ServiceGrid/EditingPopup_Update`](../application/hosted-endpoints.md#servicegrid.editingpopup_update) | Grid update | Edit service popup | DataSourceResult |
| [`POST ServiceGrid/EditingPopup_Destroy`](../application/hosted-endpoints.md#servicegrid.editingpopup_destroy) | Grid destroy | Services grid | DataSourceResult |
| [`ANY ServiceGrid/ServicePeek_Read`](../application/hosted-endpoints.md#servicegrid.servicepeek_read) | Grid read | Service peek grid | DataSourceResult |
| [`GET ServiceGrid/GetPrescribingProviderCodes`](../application/hosted-endpoints.md#servicegrid.getprescribingprovidercodes) | Dropdown read | Prescribing provider dropdown in `_ServiceForm` | Code list (cached 300 s) |
| [`GET ServiceGrid/ValidateServiceCode`](../application/hosted-endpoints.md#servicegrid.validateservicecode) | AJAX JSON | Service code entry in `claimbillentry.entry.service.validator.js` | Validation result |
| [`ANY ServiceGrid/GetChargedServicesTotal`](../application/hosted-endpoints.md#servicegrid.getchargedservicestotal) | AJAX JSON | Refresh after service changes in `claimbillentry.entry.service.js` | Total amount |

Two further actions, `Entry/GetDefaultAssignedToId` and `Provider/ShowProviderGrid`, have no caller on this screen and are documented as unattributed endpoints on the [hosted endpoints](../application/hosted-endpoints.md) page.**

## Client-side behavior
- **Script module:** `ClaimBillEntry/js/ClaimBillEntry.entry.js`, with `claimbillentry.entry.service.js`, `claimbillentry.entry.service.validator.js`, `claimbillentry.entry.worker.js`, `claimbillentry.entry.note.js`, `claimbillentry.entry.diagnosis.js`, `claimbillentry.entry.procedure.js`, `claimbillentry.entry.sendpend.js` and `claimbillentry.entry.provider.js` loaded as page scripts in `Views/Entry/Index.cshtml`.
- The view serializes `EntryViewModel` into a `kendo.observable` view model that the script binds to the page.
- Kendo widgets: DatePicker, NumericTextBox, CheckBox, Grid (in-cell and popup editing) and Window.
- Keyboard shortcuts: Alt+B new bill, Alt+S save, Alt+U submit, Alt+P send or pend, Alt+C discard, Alt+V view document, Alt+G add diagnosis, Alt+R add service, Alt+N add note.
- A `beforeunload` handler warns "Leaving this page before saving will cause your changes to be lost." when the model is dirty.
- After a successful submit, discard or send or pend, the script checks the Auto feed checkbox (`#js-bo-AutoFeed`). When it is checked, the script stays on the screen and calls `getNextQueueBill` to load the next queue bill (the Send/Pend modal is hidden first). When it is not checked, the script navigates to the hard-coded URL `/ClaimBillEntry/Inbox/Index` (`ClaimBillEntry/js/ClaimBillEntry.entry.js:212-220,255-263`, `ClaimBillEntry/js/claimbillentry.entry.sendpend.js:109-113`).
- Messages use toastr through `claimbillentry.message.js`; confirm dialogs and Kendo window helpers come from `claimbillentry.utils.js`.

## Business rules

| Rule ID | Rule | Enforcement | Source |
| --- | --- | --- | --- |
| [BR-SCR-001](../application/business-rules.md#br-scr-001-bills-must-be-in-an-openable-status) | Only Pending, Entered, Audited or Suspended bills may be opened. | Action check | `ClaimBillEntry/Controllers/EntryController.cs:88-90` |
| [BR-SCR-002](../application/business-rules.md#br-scr-002-conflict-claim-bills-require-conflictclaim-permission) | A bill on a conflict claim is refused unless the user holds `ConflictClaim`. | Action check | `ClaimBillEntry/Controllers/EntryController.cs:91-93`, `:224-239` |
| [BR-SCR-003](../application/business-rules.md#br-scr-003-submit-requires-a-service-line) | Submit requires at least one service line. | Client script | `ClaimBillEntry/js/ClaimBillEntry.entry.js:195` |
| [BR-SCR-004](../application/business-rules.md#br-scr-004-total-mismatch-requires-confirmation) | The user must confirm when Total Bill Amount differs from Services Total. | Client script | `ClaimBillEntry/js/ClaimBillEntry.entry.js:206` |
| [BR-SCR-005](../application/business-rules.md#br-scr-005-status-becomes-entered-only-on-error-free-submit) | Bill status is set to `ENT` only when `SubmitBill` returns no errors. | Action check | `ClaimBillEntry/Controllers/EntryController.cs:122-127` |
| [BR-SCR-006](../application/business-rules.md#br-scr-006-discard-permission-is-enforced-client-side-only) | Discard needs the `CBEDiscardBill` permission, but only the button visibility enforces it; the `DiscardBill` action does not check. | View model flag and client script | `ClaimBillEntry/Controllers/EntryController.cs:65`, `:159-167`, `:209`, `ClaimBillEntry/js/ClaimBillEntry.entry.js:364-365` |
| [BR-SCR-007](../application/business-rules.md#br-scr-007-type-of-bill-must-be-numeric) | Type of bill must be numeric and at most 4 characters. | Client HTML pattern | `ClaimBillEntry/Views/Entry/_Worker.cshtml:64-73` |
| [BR-SCR-008](../application/business-rules.md#br-scr-008-admit-type-must-be-1-to-5-or-9) | Admit type must be 1, 2, 3, 4, 5 or 9. | Client HTML pattern | `ClaimBillEntry/Views/Entry/_Worker.cshtml:76-85` |
| [BR-SCR-009](../application/business-rules.md#br-scr-009-unsaved-changes-warning) | The user is warned before leaving the page with unsaved changes. | Client script | `ClaimBillEntry/js/ClaimBillEntry.entry.js:2`, `:36-47` |
| [BR-SCR-010](../application/business-rules.md#br-scr-010-procedure-type-maps-to-principal-or-other) | Procedure type `P` maps to Principal and every other code maps to Other. | AutoMapper configuration | `ClaimBillEntry/Classes/AutoMapperBootStrapper.cs:67-75` |

## Navigation

| Target | Trigger | Parameters |
| --- | --- | --- |
| [Inbox](inbox.md) | Bill submitted, discarded, or sent or pended, with Auto feed unchecked | None; the script navigates to `/ClaimBillEntry/Inbox/Index` |
| Bill entry (this screen) | Next bill from queue, open bill or new bill, or a successful submit, discard or send or pend with Auto feed checked | Bill id in the URL, kept in step with `history.pushState` |
| OnBase document viewer (external) | View document button | `documentUrl` from the loaded `Worker` view model; no configuration key holding this URL was found in the analyzed source** |
| Send/Pend modal, billing provider lookup, rendering provider lookup, Add service window, Edit service popup, Add/Edit note popup | Toolbar buttons and lookup icons | None; these open in place, see [Dialogs and partials](#dialogs-and-partials) |

## Screen flow diagram

The diagram shows the Bill entry screen, the screens it exchanges navigation with, and the dialogs it opens in place.

```mermaid
flowchart TD
    Entry["Bill entry<br>Entry/Index/{id}"] -->|"submit, discard, send or pend<br>(Auto feed unchecked)"| Inbox["Inbox<br>Inbox/Index"]
    Entry -->|"submit, discard, send or pend<br>(Auto feed checked)"| Entry
    Entry -->|"Alt+P"| SendPend["Send/Pend modal"]
    Entry -->|"TIN lookup icon"| BillProv["Billing provider lookup"]
    Entry -->|"rendering provider"| RendProv["Rendering provider lookup"]
    Entry -->|"Alt+R"| AddSvc["Add service window"]
    Entry -->|"edit service row"| EditSvc["Edit service popup"]
    Entry -->|"Alt+N"| Note["Add/Edit note popup"]
    Entry -->|"Alt+V"| OnBase["OnBase document viewer"]
    Inbox -->|"row double-click"| Entry
    Search["Search<br>Search/Index"] -->|"open result"| Entry
```

---

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts. Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources
- ClaimBillEntry/Controllers/EntryController.cs
- ClaimBillEntry/Controllers/BaseController.cs
- ClaimBillEntry/Controllers/HomeController.cs
- ClaimBillEntry/Controllers/ProviderController.cs
- ClaimBillEntry/Controllers/NoteGridController.cs
- ClaimBillEntry/Controllers/DiagnosisGridController.cs
- ClaimBillEntry/Controllers/ProcedureGridController.cs
- ClaimBillEntry/Controllers/ServiceGridController.cs
- ClaimBillEntry/Views/Entry/Index.cshtml
- ClaimBillEntry/Views/Entry/_Worker.cshtml
- ClaimBillEntry/Views/Entry/_DiagnosesAndProcedures.cshtml
- ClaimBillEntry/Views/Entry/_DiagnosesGrid.cshtml
- ClaimBillEntry/Views/Entry/_ProcedureGrid.cshtml
- ClaimBillEntry/Views/Entry/_Services.cshtml
- ClaimBillEntry/Views/Entry/_ServiceGrid.cshtml
- ClaimBillEntry/Views/Entry/EditorTemplates/_AddService.cshtml
- ClaimBillEntry/Views/Entry/EditorTemplates/_ServiceForm.cshtml
- ClaimBillEntry/Views/Entry/_ServicePeekGrid.cshtml
- ClaimBillEntry/Views/Entry/_NotesGrid.cshtml
- ClaimBillEntry/Views/Entry/EditorTemplates/_EditNote.cshtml
- ClaimBillEntry/Views/Provider/_ProviderLocationGrid.cshtml
- ClaimBillEntry/Views/Provider/_RenderingProviderGrid.cshtml
- ClaimBillEntry/Views/Shared/_Bootstrap3.cshtml
- ClaimBillEntry/ViewModels/Entry/EntryViewModel.cs
- ClaimBillEntry/ViewModels/Entry/WorkerViewModel.cs
- ClaimBillEntry/Classes/AutoMapperBootStrapper.cs
- ClaimBillEntry/js/ClaimBillEntry.entry.js
- ClaimBillEntry/js/claimbillentry.entry.service.js
- ClaimBillEntry/js/claimbillentry.entry.service.validator.js
- ClaimBillEntry/js/claimbillentry.entry.worker.js
- ClaimBillEntry/js/claimbillentry.entry.note.js
- ClaimBillEntry/js/claimbillentry.entry.diagnosis.js
- ClaimBillEntry/js/claimbillentry.entry.procedure.js
- ClaimBillEntry/js/claimbillentry.entry.sendpend.js
- ClaimBillEntry/js/claimbillentry.entry.provider.js
- ClaimBillEntry/js/claimbillentry.message.js
- ClaimBillEntry/js/claimbillentry.utils.js
- ClaimBillEntry/App_Start/RouteConfig.cs
- SAIF.DependencyMaps.Web.ClaimBillEntry/DependencyMap.cs
